2025年3月蓝桥杯蓝桥C++(STEMA)中/高级
STEMA
2025
2025-06-09 19:42:55
91次
一、单选题
运行以下程序,输出的结果是()。
void compute(int &a, int &b, int c = 10) {
int temp = a;
a = b + c;
b = temp * c;
c = b - a;
}
int main() {
int x = 1, y = 2, z = 3;
compute(z, x);
compute(x, y, z);
cout << x << " " << y << " " << z << endl;
return 0;
} | A. 1 2 3 |
B. 13330317 |
| C. 1 330 11 |
D. 13 330 11 |
【知识点】 蓝桥杯C++中/高级
二、编程题
最终分数
题目描述:
A、B、C 三人之间进行了若干场一对一的乒乓球比赛。比赛规则如下:
1)每场比赛为一对一形式,只有两人参与;
2)每场比赛的胜者加 10 分,败者扣 10 分;
3)初始时,三人的分数均为 0 分。
已知比赛结束后 A 和 B 的最终分数,请根据规则判断 C 的分数是否大于 0,并输出 C 的最终分数。
输入描述:
一行输入两个整数(-1000≤整数≤1000),分别表示比赛结束后 A 和 B 的分数,整数之间以一个空格隔开。
输出描述:
第一行输出一个字符,如果 C 的分数大于 0,则输出 "Y",否则,输出 "N";
第二行输出一个整数,表示 C 的分数。
样例输入:
10 -20
样例输出:
Y 10
【知识点】 蓝桥杯C++中/高级
山峰高度
题目描述:
有 n 座山峰排成一行,从左到右依次编号为 1 至 n。已知每座山峰的高度,请找出满足以下条件的所有山峰中编号最大的那个。
条件:该山峰的左侧(即所有编号比它小的山峰)至少存在一座山峰的高度小于它。
如果存在这样的山峰,输出其编号;否则,输出 -1。
例 1:n = 5,从左到右每座山峰的高度依次为 140,200,120,150,110;其中 2 号和 4 号山峰都满足条件,编号最大的是 4 号山峰。
例 2:n = 3,从左到右每座山峰的高度依次为 190,105,82,没有满足条件的山峰。
输入描述:
第一行输入一个整数 n(1≤n≤500),表示山峰的数量;
第二行输入 n 个整数(1≤整数≤5000),表示从左到右每座山峰的高度,整数之间以一个空格隔开。
输出描述:
输出一个整数,表示满足题目条件的最大山峰编号,如果没有满足条件的山峰则输出 -1。
样例输入:
5 140 200 120 150 110
样例输出:
4
【知识点】 蓝桥杯C++中/高级
旋转矩阵
题目描述:
给定两个 n × n 的数字矩阵,判断能否通过将其中任意一个矩阵顺时针旋转 0 度或 90 度或 180 度或270 度后,使得两个矩阵对应位置的元素完全相同。
如果满足则输出 "YES",否则输出 "NO"。
例如:n = 3,两个 3 × 3 的数字矩阵如下:

这里我们选择旋转矩阵 1,将矩阵 1 顺时针旋转 0 度、90 度、180 度以及 270 度后的结果分别如下:

不难发现,当矩阵 1 顺时针旋转 180 度后,两个矩阵对应位置的元素完全相同。
输入描述:
本题的每个测试点包含多组测试数据,格式如下:
第一行输入一个整数 T(1≤T≤100),表示测试数据组数;
接下来的 T 组数据:
每组数据的第一行输入一个整数 n(2≤n≤100),表示矩阵的大小;
接下来 n 行,每行输入 n 个整数(0≤整数≤9),表示矩阵 1 中的元素,整数之间以一个空格隔开;
再接下来 n 行,每行输入 n 个整数(0≤整数≤9),表示矩阵 2 中的元素,整数之间以一个空格隔开。
输出描述:
输出 T 行。其中第 i 行表示第 i 组测试数据的判断结果,如果能够通过旋转使得两个数字矩阵对应位置的元素完全相同,则输出 "YES",否则输出 "NO"。
样例输入:
2 3 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 2 1 0 0 1 2 0 0 2
样例输出:
YES NO
【知识点】 蓝桥杯C++中/高级
移除棋子
题目描述:
有 n 颗棋子排成一排,每颗棋子为白色(用 1 表示)或黑色(用 0 表示)。每次可以选择从最左端或者最右端移除一颗棋子,最终使剩余棋子中白色棋子的数量为 m。
给定两个整数 n 和 m,及 n 颗棋子的颜色排列。请计算最少要移除多少颗棋子,才能使剩余棋子中白色棋子的数量为 m;如果无法实现该目标,输出 -1。
例 1:n = 8,m = 2,8 颗棋子的颜色分别是 0 1 0 1 1 0 0 1,要使剩余棋子中白色棋子的数量为2,最少需要移除 3 颗棋子,移除方案如下:
第一次,移除最右端的棋子,移除后剩余棋子的颜色分别是 0 1 0 1 1 0 0;
第二次,移除最左端的棋子,移除后剩余棋子的颜色分别是 1 0 1 1 0 0;
第三次,移除最左端的棋子,移除后剩余棋子的颜色分别是 0 1 1 0 0;
此时,剩余棋子中白色棋子的数量为 2。
例 2:n = 5,m = 3,5 颗棋子的颜色分别是 1 0 0 1 0,无论如何移除棋子,都不能使剩余棋子中白色棋子的数量为 3。
输入描述:
第一行输入两个整数 n,m(1≤n,m≤106),分别表示初始棋子数量和目标白色棋子数量,整数之间以一个空格隔开;
第二行输入 n 个整数(整数为 1 或 0,1 表示白色棋子,0 表示黑色棋子),表示从左到右每颗棋子的颜色,整数之间以一个空格隔开。
输出描述:
输出一个整数,表示最少要移除多少颗棋子,才能使剩余棋子中白色棋子的数量为 m;如果无论如何移除棋子,都不能使剩余棋子中白色棋子的数量为 m,则输出 -1。
样例输入:
8 2 0 1 0 1 1 0 0 1
样例输出:
3
【知识点】 蓝桥杯C++中/高级
